#include "Array.h"
#include "TinyJsonValue.h"

namespace tinyjson
{
    Array::Array()
    {
        m_val.clear();
    }
    Array::Array(const std::vector<TinyJsonValuePtr> &val)
    {
        m_val = val;
    }

    size_t Array::size() const
    {
        return m_val.size();
    }

    Boolean Array::empty() const
    {
        return m_val.empty();
    }

    void Array::push_back(const TinyJsonValuePtr &val)
    {
        m_val.push_back(val);
    }

    void Array::push_back(const TinyJsonValue &value)
    {
        TinyJsonValuePtr pvalue = std::make_shared<TinyJsonValue>(value);
        m_val.push_back(pvalue);
    }

    TinyJsonValuePtr &Array::operator[](size_t index)
    {
        return m_val[index];
    }
    const TinyJsonValuePtr &Array::operator[](size_t index) const
    {
        return m_val[index];
    }

    ArrayPtr Array::create_tinyjsonarray()
    {
        ArrayPtr p = std::make_shared<Array>();
        return p;
    }

    std::ostream &operator<<(std::ostream &out, const Array &array)
    {
        out << '[';
        size_t size = array.size();
        for (int i = 0; i < size; ++i)
        {
            const TinyJsonValuePtr &val = array[i];
            TinyJsonValue::format_value(out, *val);
            if (i != size - 1)
            {
                out << ",";
            }
        }
        out << ']';
        return out;
    }
}